package com.gxa.controller;

import com.gxa.common.R;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MaxUploadSizeExceededException;

import java.io.IOException;
import java.sql.SQLException;

/**
 * @Author: fxr
 * @Date: 2021/12/9
 * @Description: 所有的异常统一的交给这个类来处理，最后友好的返回。
 */
@ControllerAdvice   //标识统一处理Controller类中所有异常
public class GlobalExceptionHandler {
    @ExceptionHandler(ArithmeticException.class) //监听当前类中所有的方法只要出现ArithmeticException异常就会走这个方法
    @ResponseBody
    public R returnArithmeticException(){
        R r = new R();
        r.setCode(500);
        r.setMsg("系统出现数字除零异常，请联系管理员");
        return r;
    }

    @ExceptionHandler(NumberFormatException.class)
    @ResponseBody
    public R returnNumberFormatException(){
        R r = new R();
        r.setCode(500);
        r.setMsg("数字转换异常，请联系管理员");
        return r;
    }

    @ExceptionHandler(MaxUploadSizeExceededException.class)
    @ResponseBody
    public R maxUploadSizeExceededException(){
        R r = new R();
        r.setCode(500);
        r.setMsg("文件上传大小超限");
        return r;
    }

//    @ExceptionHandler(SQLException.class)
//    @ResponseBody
//    public R sqlException(){
//        R r = new R();
//        r.setCode(500);
//        r.setMsg("数据更新错误，请联系管理员");
//        return r;
//    }
    @ExceptionHandler(IOException.class)
    @ResponseBody
    public R ioException(){
        R r = new R();
        r.setCode(500);
        r.setMsg("文件传输错误，请联系管理员");
        return r;
    }


    //所有的异常和错误都会进这个方法
//    @ExceptionHandler(Throwable.class)
//    @ResponseBody
//    public R returnException(){
//        R r = new R();
//        r.setCode(500);
//        r.setMsg("系统开小差了，请联系管理员");
//        return r;
//    }
}
